package com.zoro.barn.business.service.sqldocument.business.sql.dao;

import com.zoro.barn.business.service.sqldocument.business.sql.entity.BarnSqlInfo;
import com.zoro.barn.commons.db.annotations.MybatisMapper;
import com.zoro.barn.commons.db.annotations.NeedPage;
import com.zoro.barn.commons.db.enums.Order;

import java.util.List;

/**
 * @author zhaoxingwu
 */
@MybatisMapper
public interface BarnSqlInfoMapper {


    void insert(BarnSqlInfo barnSqlInfo);
    /**
     * 查询
     *
     * @param sqlInfo 查询条件
     * @return 查询结果
     */
    @NeedPage
    List<BarnSqlInfo> query(BarnSqlInfo sqlInfo, Order order);

    int update(BarnSqlInfo info);

    Integer maxOrder(String productId);

    /**
     * 查询区间内的sql
     *
     * @param productId product id
     * @param small     range start order number
     * @param large     range end order number
     * @return sql list
     */
    List<BarnSqlInfo> sqlRange(String productId, long small, long large);

    /**
     * 批量更新 order
     *
     * @param sqlList sql
     */
    void updateOrderBatch(List<BarnSqlInfo> sqlList);

    /**
     * 查询 一个 product 的sql,不包含 被特定 project 使用的项目
     *
     * @param productId product id
     * @param start     sql order
     * @param end       sql order
     * @return sql info set
     */
    List<BarnSqlInfo> getProductSql(String productId, Integer start, Integer end);

    /**
     * 查询一个 product 的sql ， 包含 指定project
     *
     * @param productId product id
     * @param projectId project id
     * @param start     start sql order
     * @param end       end sql order
     * @return sql info set
     */
    List<BarnSqlInfo> getProjectSql(String productId, String projectId, Integer start, Integer end);

    BarnSqlInfo selectById(String id);
    BarnSqlInfo deleteById(String id);
}
